<!-- 
    vue和react的区别：
    1.核心思想不同
     Vue的核心思想是尽可能的降低前端开发的门槛，是一个灵活易用的渐进式双向绑定的MVVM框架。
     React的核心思想是声明式渲染和组件化、单向数据流，React既不属于MVC也不属于MVVM架构。
     问题：
        1) 声明式 是什么意思？
        与声明式相对应的是命令式。命令式是指通过DOM操作一步步把网页变成想要的样子，而声明式则是只需要通过状态去形容最后的网页长什么样子即可。
        2) 组件化是什么意思？
        组件化指的是尽可能的将页面拆分成一个个较小的、可以复用的组件，这样让我们的代码更加方便组织和管理，并且拓展性也更强。
        3) 如何理解React的单向数据流？
        React的单向数据流指的是数据主要从父节点通过props传递到子节点，如果顶层某个props改变了，React会重新渲染所有的子节点，但是单向数据流并非单向绑定，React想要从一个组件去更新另一个组件的状态，需要进行状态提升，即将状态提升到他们最近的祖先组件中，触发父组件的状态变更，从而影响另一个组件的显示。单向数据流的好处是能够保证状态改变的可追溯性，假如，父组件维护了一个状态，子组件如果能够随意更改父组件的状态，那么各组件的状态改变就会变得难以追溯。
    2.组件写法不同
      Vue的组件写法是通过template的单文件组件格式，使用了模板语法。
      React的组件写法是JSX+inline style，也就是把HTML和CSS全部写进JavaScript中。
    3.响应式原理不同 (也就是 改变数据的方式不同)
      React主要是通过setState()方法来更新状态，状态更新之后，组件也会重新渲染。
      vue会遍历data数据对象，使用Object.definedProperty()将每个属性都转换为getter和setter，每个Vue组件实例都有一个对应的watcher实例，在组件初次渲染的时候会记录组件用到了那些数据，当数据发生改变的时候，会触发setter方法，并通知所有依赖这个数据的watcher实例调用update方法去触发组件的compile渲染方法，进行渲染数据。
    4.diff算法不同
      vue对比节点，如果节点元素类型相同，但是className不同，认为是不同类型的元素，会进行删除重建，但是react则会认为是同类型的节点，只会修改节点属性。
      vue的列表比对采用的是首尾指针法，而react采用的是从左到右依次比对的方式，当一个集合只是把最后一个节点移动到了第一个，react会把前面的节点依次移动，而vue只会把最后一个节点移动到最后一个，从这点上来说vue的对比方式更加高效。
      问题：
        1) 什么是diff算法
           Diff算法是一种对比算法，主要是对比旧的虚拟DOM和新的虚拟DOM，找出发生更改的节点，并只更新这些节点，而不更新未发生变化的节点，从而准确的更新DOM，减少操作真实DOM的次数，提高性能。
        2) Diff算法是深度优先还是广度优先？时间复杂度是多少？
           Diff算法是深度优先算法，时间复杂度是O(n)。
        3) 为什么不建议使用index作为节点的key？
           假如我们在一组节点的首部添加了一个新节点，使用index作为key，diff算法通过key判断是相同类型的节点之后，会进行进一步的比较，把其内容进行更改，这样就会造成这一组的节点都被更新了，最后一个节点还被当做新节点创建了，这样会造成很大的性能浪费，因此不建议使用index作为key。
    5.vue支持双向绑定
      vue的表单可以使用v-model支持双向绑定，相比于react来说开发上更加方便，当然v-model其实就是语法糖，本质上和react写表单的方式没什么区别。

    
 -->